package tech.aistar.corejava.day12;

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * @author success
 * @version 1.0
 * @description:本类用来演示:
 * @date 2019/7/30 0030
 */
public class HashMapDemo {
    public static void main(String[] args) {
        //key - Integer类型
        //value - String类型
        Map<Integer,String> map = new HashMap<>();

        //调用put方法
        //针对key是无序不可重复的.如果有重复的,那么后面的会覆盖前面的
        //这一点需要和hashset进行区分[拒绝添加!]
        map.put(1,"java");
        map.put(2,"python");
        map.put(1,"mysql");//覆盖1 java
        map.put(3,"oracle");
        map.put(4,"redis");
        map.put(null,"null");

        System.out.println(map.size());//4

        //根据key来获取value
        System.out.println(map.get(2));//python

        System.out.println("===迭代方式一==");

        //map集合特有的两种迭代方式 - 一定要能拖手能够写出来.
        //第一种方式
        //将map的所有的key放入到一个set集合中.
        //返回此map集合包含的键的 Set 视图。
        Set<Integer> keySets = map.keySet();

        Iterator<Integer> iter = keySets.iterator();

        while(iter.hasNext()){
            Integer key = iter.next();//获取每个key
            //根据key来获取value
            String value = map.get(key);
            //输出
            System.out.println(key+"->"+value);
        }

        System.out.println("=====");
        //直接输出
        System.out.println(map);

        System.out.println("======迭代方式二=====");
       // Set<Map.Entry<K,V>> entrySet()
       // 返回此map集合中包含的key-value的 Set 视图。

        Set<Map.Entry<Integer,String>> entrySets = map.entrySet();

        Iterator<Map.Entry<Integer,String>> entryIter = entrySets.iterator();

        while(entryIter.hasNext()){
            Map.Entry<Integer,String> entry = entryIter.next();
            System.out.println(entry.getKey()+":"+entry.getValue());
        }
        System.out.println("======JDK8.0新特性=======");

        map.forEach((k,v) -> System.out.println(k+":"+v));
    }
}
